Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: split server chunk #7040

Open
wants to merge 81 commits into
base: release/next
Choose a base branch
from

Conversation

HomyeeKing
Copy link
Contributor

@HomyeeKing HomyeeKing commented Jan 2, 2025

本次改动不存在 breaking change

具体改动如下:

@ice/app

requireHooks

新增一些 webpack 文件(对应后续 @ice/bundles 的修改),并且支持拦截对应.js结尾的路径

server 产物的构建逻辑

原先使用 esbuild 进行了两次操作:

  1. 构建生成 node_modules/.cache/default_defineAppConfig_app.mjs (保留)
  2. 根据 .ice/ 目录生成服务端产物,这部分改为由 webpack 处理,判断的条件是 entry 为非数组

配置项

服务端构建逻辑通过配置项开启,默认还是 esbuild 处理,当配置如下时开启:

// ice.config.mts
server:{
  bundler: 'webpack'
}

@ice/bundles

新增一些 webpack 的内置文件的导出,由 requireHooks 保证使用的是同一份,供 ICE 插件使用

@HomyeeKing HomyeeKing changed the base branch from master to release/next January 2, 2025 10:00
@HomyeeKing HomyeeKing marked this pull request as ready for review February 12, 2025 07:10
@ClarkXia ClarkXia requested review from ClarkXia and XXXMrG February 13, 2025 05:27
@HomyeeKing HomyeeKing marked this pull request as draft February 13, 2025 06:01
@HomyeeKing HomyeeKing marked this pull request as ready for review February 27, 2025 03:43
@HomyeeKing HomyeeKing force-pushed the feat/split-server-chunk branch from d3920f8 to 39eb3f5 Compare February 27, 2025 09:20
fallback: { crypto: false },
extensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs', '...'],
plugins: [
new TsconfigPathsPlugin({
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  这个是必要插件吗,理论上编译不受 tsconfig 影响

@@ -144,6 +145,20 @@ export function createServerCompiler(options: Options) {
redirectImports,
getRoutesFile,
}, 'esbuild', { isServer });
const transformWebpackPlugins = getCompilerPlugins(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

没必要同时获取 transformWebpackPlugins 和 esbuildPlugins

esbuildResult = await esbuild.build(buildOptions);
if (Array.isArray(buildOptions.entryPoints)) {
// this build phase is aimed to generate .ice/
esbuildResult = await esbuild.build(buildOptions);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

为啥多 entry 必定是 esbuild

],
},
{
test: ASSETS_RE,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

webpack 大部分规则是不是跟 csr 对齐就好了,没必要单独这里维护,对于 node 端而言主要是产物 target 和样式处理规则的差异

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants